package com.wangyuan.demo.controller;

import com.wangyuan.demo.entity.Emp;
import com.wangyuan.demo.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpSession;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
import java.util.Objects;

/**
 * 员工控制器
 *
 * @author Albert
 * @date 2025-06-23 14:52:25
 */
@Controller
@RequestMapping("emp")
public class EmpController {

    /**
     * 自动注入 EmpService 实例，用于处理员工信息的业务逻辑
     */
    @Autowired
    private EmpService empService;

    /**
     * 检查登录状态
     *
     * @param session
     */
    public Boolean isLogin(HttpSession session) throws UnsupportedEncodingException {
        Object user = session.getAttribute("user");
        return !Objects.isNull(user);
    }

    /**
     * 查询所有员工信息，并将结果存入 Model 传递给前端JSP页面展示
     *
     * @param model Spring MVC 提供的数据模型对象
     * @return 返回视图名称 "emplist"，对应 JSP 页面路径
     */
    @GetMapping("findAll")
    public String findAll(Model model, HttpSession session) throws UnsupportedEncodingException {
        if (!isLogin(session)) {
            return "redirect:/login.jsp?msg=" + URLEncoder.encode("请先登录", "UTF-8");
        }
        List<Emp> emps = empService.findAll();
        model.addAttribute("emps", emps);
        return "/empList";
    }

    /**
     * 保存员工信息
     *
     * @param emp 接收前端JSP页面提交的员工实体对象
     * @return 重定向到员工列表页面
     */
    @PostMapping("save")
    public String save(Emp emp, HttpSession session) throws UnsupportedEncodingException {
        if (!isLogin(session)) {
            return "redirect:/login.jsp?msg=" + URLEncoder.encode("请先登录", "UTF-8");
        }
        try {
            empService.save(emp);
        } catch (Exception e) {
            e.printStackTrace();
            return "redirect:/addEmp.jsp?msg=" + URLEncoder.encode(e.getMessage(), "UTF-8");
        }
        return "redirect:/emp/findAll";
    }

    /**
     * 根据员工 ID 删除员工信息
     *
     * @param id 要删除的员工 ID
     * @return 重定向到员工列表页面
     */
    @GetMapping("delete")
    public String delete(Integer id, HttpSession session) throws UnsupportedEncodingException {
        if (!isLogin(session)) {
            return "redirect:/login.jsp?msg=" + URLEncoder.encode("请先登录", "UTF-8");
        }
        empService.delete(id);
        return "redirect:/emp/findAll";
    }

    /**
     * 根据员工 ID 查询员工信息，并将数据传入 Model 用于页面回显
     *
     * @param id    要查询的员工 ID
     * @param model 数据模型对象，用于向前端JSP页面传递数据
     * @return 返回视图名称 "/updateEmp"，跳转至修改页面
     */
    @GetMapping("findOne")
    public String findOne(Integer id, Model model, HttpSession session) throws UnsupportedEncodingException {
        if (!isLogin(session)) {
            return "redirect:/login.jsp?msg=" + URLEncoder.encode("请先登录", "UTF-8");
        }
        Emp dbEmp = empService.findById(id);
        model.addAttribute("emp", dbEmp);
        return "/updateEmp";
    }

    /**
     * 修改员工信息
     *
     * @param emp 接收前端JSP页面提交的员工实体对象（包含修改后的数据）
     * @return 重定向到员工列表页面
     */
    @PostMapping("update")
    public String update(Emp emp, HttpSession session) throws UnsupportedEncodingException {
        if (!isLogin(session)) {
            return "redirect:/login.jsp?msg=" + URLEncoder.encode("请先登录", "UTF-8");
        }
        try {
            empService.update(emp);
        } catch (Exception e) {
            e.printStackTrace();
            return "redirect:/emp/findOne?id=" + emp.getId() + "&msg=" + URLEncoder.encode(e.getMessage(), "UTF-8");
        }
        return "redirect:/emp/findAll";
    }

    /**
     * 退出登录
     *
     * @param session
     * @return String
     */
    @GetMapping("logOut")
    public String logOut(HttpSession session) throws UnsupportedEncodingException {
        session.removeAttribute("user");
        return "redirect:/login.jsp?logOutMsg=" + URLEncoder.encode("您已退出登录", "UTF-8");
    }
}